package cl.solidit.geomanagement.web.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import cl.solidit.geomanagement.persistance.UserDAO;
import cl.solidit.geomanagement.persistance.VisitaDAO;
import cl.solidit.geomanagement.persistance.model.PreguntaRealizada;
import cl.solidit.geomanagement.persistance.model.Usuario;
import cl.solidit.geomanagement.persistance.model.Visita;

@Controller
public class ConsultarVisitaController {
	@Autowired
	private VisitaDAO visitaDAO;
	@Autowired
	private UserDAO userDAO;

	@RequestMapping(value = "/consultar_visita", method = RequestMethod.POST)
	public String consultarVisita(
			@ModelAttribute("modeloVisita") Visita visita, ModelMap modelo) {
		modelo.get(visita);
		return "consultar_visita";
	}

	@Transactional
	@RequestMapping(value = "consultar_visita/{idVisita}", method = RequestMethod.GET)
	public ModelAndView consultarVisitaGet(@PathVariable Long idVisita) {

		Visita visita = visitaDAO.findById(idVisita);
		Map<String, Object> map = new HashMap<String, Object>();
		Hibernate.initialize(visita.getCliente());
		Hibernate.initialize(visita.getPropiedad());
		if (visita.getAgente() != null) {
			Hibernate.initialize(visita.getAgente().getPersona().getNombre());
		}
		for (PreguntaRealizada pregunta : visita.getPreguntasRealizadas()) {
			Hibernate.initialize(pregunta.getPreguntaFrecuente());
		}

		map.put("visita", visita);
		return new ModelAndView("consultar_visita", map);
	}
	
//	VISITAS AGENDADAS
	@Transactional
	@RequestMapping(value = "/consultar_visita_agendada", method = RequestMethod.GET)
	public ModelAndView visitaAgendadaGet() {

		List<Visita> listaVisitaAgendada = visitaDAO.consultarVisitaAgendada();
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("listaVisitaAgendada", listaVisitaAgendada);
		for (Visita p : listaVisitaAgendada) {
			Hibernate.initialize(p.getCliente());
		}
		return new ModelAndView("consultar_visita_agendada", map);
	}

	@Transactional
	@RequestMapping(value = "detalle_visita_agendada/{idVisita}", method = RequestMethod.GET)
	public ModelAndView detalleVisitaAgendadaGet(@PathVariable Long idVisita) {

		Visita visita = visitaDAO.findById(idVisita);
		Map<String, Object> map = new HashMap<String, Object>();
		Hibernate.initialize(visita.getCliente());
		Hibernate.initialize(visita.getPropiedad());

		for (PreguntaRealizada pregunta : visita.getPreguntasRealizadas()) {
			Hibernate.initialize(pregunta.getPreguntaFrecuente());
		}

		map.put("visita", visita);
		return new ModelAndView("consultar_visita", map);
	}
//	FIN VISITAS AGENDADAS
	
	
	
//	VISITAS PENDIENTES
	@RequestMapping(value = "/consultar_visita_pendiente", method = RequestMethod.POST)
	public ModelAndView exit() {

		return new ModelAndView("consultar_visita_pendiente");
	}
	@Transactional
	@RequestMapping(value = "/consultar_visita_pendiente/{id}", method = RequestMethod.GET)
	public ModelAndView visitaPendinteGet(@PathVariable Long id,HttpServletRequest request) {

		Usuario usuario = userDAO.findById(id);
		Map<String, Object> map = new HashMap<String, Object>();
		Usuario u = new Usuario();
		List<Visita> listaVisita = visitaDAO.consultarVisitaPendiente(id);
		Hibernate.initialize(usuario.getPersona());
		Hibernate.initialize(usuario.getPersona().getComuna());
		
		for(Visita p: listaVisita){
			Hibernate.initialize(p.getCliente());
		}
		
		map.put("command", u);
		map.put("listaVisita", listaVisita);
		map.put("usuario", usuario);
		

		return new ModelAndView("consultar_visita_pendiente", map);

	}
	@Transactional
	@RequestMapping(value = "/consultar_visita_pendiente", method = RequestMethod.GET)
	public ModelAndView accesoPagina(HttpServletRequest request) {
		return this.visitaPendinteGet(Long.parseLong(request.getSession().getAttribute("userId").toString()),request);

	}
//	FIN VISITAS PENDIENTES

}
